`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2023/11/08 19:47:26
// Design Name: 
// Module Name: clk_rst_manage
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////


module clk_rst_manage#(
    parameter   SYSTEM_CLK          =   50_000_000,// 系统时钟
    parameter   UART_BAUDRATE       =   9600       // 波特率
)(
    input   i_clk       ,

    output  o_clk_50MHz ,
    output  o_rx_clk    ,
    output  o_tx_clk    ,

    output  o_clk_rst   ,
    output  o_tx_rst    ,
    output  o_rx_rst    

    );

/*********parameter**********/
localparam      CLK_DIV_UART = SYSTEM_CLK / UART_BAUDRATE;
/*********wire***************/
wire            locked          ;
wire            clk_baud        ;
/*********reg****************/
reg             r_o_clk_50MHz   ;
reg             r_o_rx_clk      ;
reg             r_o_tx_clk      ;
reg             r_o_clk_rst     ;
reg             r_o_tx_rst      ;
reg             r_o_rx_rst      ;
/*********code*************/

clk_pll_50 u_clk_pll_50
(    
    // Clock in ports
    .clk_in1    (i_clk      ) ,       // input clk_in1
    // Status and control signals
    .locked     (locked     ) ,       // output locked
    // Clock out ports
    .clk_out1   (o_clk_50MHz)         // output clk_out1
    );      

assign  o_clk_rst = ~locked   ;

clk_div_module #(
    .CLK_DIV_NUM             ( CLK_DIV_UART ))
 u_clk_div_rx (
    .i_clk                   ( o_clk_50MHz  ),
    .i_rst                   ( o_clk_rst  ),

    .o_clk                   ( o_rx_clk     )
);

clk_div_module #(
    .CLK_DIV_NUM             ( CLK_DIV_UART ))
 u_clk_div_tx (
    .i_clk                   ( o_clk_50MHz  ),
    .i_rst                   ( o_clk_rst  ),

    .o_clk                   ( o_tx_clk     )
);

assign  o_rx_clk = clk_baud;
assign  o_tx_clk = clk_baud;
endmodule
